#pragma once

#include <initguid.h>
#include <ObjBase.h>

// {F760952D-96C9-4e59-B3D6-30B0C54A4F84}
DEFINE_GUID(CLSID_IExampleExe, 0xf760952d, 0x96c9, 0x4e59, 0xb3, 0xd6, 0x30, 0xb0, 0xc5, 0x4a, 0x4f, 0x84);

// {298362EF-ECD2-4395-9A94-B3927EE3C6DC}
DEFINE_GUID(IID_IExampleExe, 0x298362ef, 0xecd2, 0x4395, 0x9a, 0x94, 0xb3, 0x92, 0x7e, 0xe3, 0xc6, 0xdc);

// {E403A9BF-6C5A-4e62-BFA2-897A9F9647BD}
DEFINE_GUID(TLBID_ExampleExe, 0xe403a9bf, 0x6c5a, 0x4e62, 0xbf, 0xa2, 0x89, 0x7a, 0x9f, 0x96, 0x47, 0xbd);

#undef INTERFACE
#define INTERFACE IExampleExe
DECLARE_INTERFACE_(INTERFACE, IDispatch)
{
    STDMETHOD(QueryInterface)(THIS_ REFIID, void **) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;
    STDMETHOD(GetTypeInfoCount)(THIS_ UINT *) PURE;
    STDMETHOD(GetTypeInfo)(THIS_ UINT, LCID, ITypeInfo **) PURE;
    STDMETHOD(GetIDsOfNames)(THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID *) PURE;
    STDMETHOD(Invoke)(THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *) PURE;
    STDMETHOD(SetString)(THIS_ BSTR) PURE;
    STDMETHOD(GetString)(THIS_ BSTR *) PURE;
};
